﻿using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Campeonato.Model;

namespace PES.Common.DAL
{
    using PES.Model;

    class PontuacaoDAL
    {
        public Pontuacao BuscarPontuacaoJogador(long _jogadorID)
        {
            Database db = DatabaseFactory.CreateDatabase(DbHelper.PES_DATABASE);
            string sql = @"SELECT 
                                    P.pontuacao_id,
                                    P.pontos,
                                    P.num_vitorias,
                                    P.num_empates,
                                    P.num_derrotas,
                                    P.gols_pro,
                                    P.gols_contra
                           FROM
                                    Pontuacao P,
                                    Jogador J
                           WHERE
                                    J.jogador_id = {0} AND
                                    J.pontuacao_id = P.pontuacao_id
            ";
            string jogadorIDParam = db.BuildParameterName("JogID");

            sql = string.Format(sql, jogadorIDParam);

            DbCommand cmd = db.GetSqlStringCommand(sql);
            db.AddInParameter(cmd, jogadorIDParam, DbType.Int64, _jogadorID);

            Pontuacao pont = null;

            using (IDataReader dbReader = db.ExecuteReader(cmd))
            {
                if (dbReader.Read())
                {
                    pont = new Pontuacao();
                    pont.ID = dbReader.GetInt64(0);
                    pont.TotalPontos = dbReader.GetInt32(1);
                    pont.NumVitorias = dbReader.GetInt32(2);
                    pont.NumEmpates = dbReader.GetInt32(3);
                    pont.NumDerrotas = dbReader.GetInt32(4);
                    pont.GolsPro = dbReader.GetInt32(5);
                    pont.GolsContra = dbReader.GetInt32(6);
                }
            }

            return pont;
        }

        public void AtualizaPontuacaoJogador(Pontuacao _pontuacao)
        {
            string sql = "UPDATE Pontuacao SET pontos = {0}, num_vitorias = {1}, num_empates = {2}, num_derrotas = {3}, gols_pro = {4}, gols_contra = {5} WHERE pontuacao_id = {6}";

            Database db = DatabaseFactory.CreateDatabase(DbHelper.PES_DATABASE);

            string[] parametros = new string[]{
                db.BuildParameterName("Pontos"),
                db.BuildParameterName("NumVit"),
                db.BuildParameterName("NumEmp"),
                db.BuildParameterName("NumDerr"),
                db.BuildParameterName("GolsPro"),
                db.BuildParameterName("GolsCont"),
                db.BuildParameterName("PontoID")
            };

            sql = string.Format(sql, parametros);

            DbCommand cmd = db.GetSqlStringCommand(sql);

            db.AddInParameter(cmd, parametros[0], DbType.Int32, _pontuacao.TotalPontos);
            db.AddInParameter(cmd, parametros[1], DbType.Int32, _pontuacao.NumVitorias);
            db.AddInParameter(cmd, parametros[2], DbType.Int32, _pontuacao.NumEmpates);
            db.AddInParameter(cmd, parametros[3], DbType.Int32, _pontuacao.NumDerrotas);
            db.AddInParameter(cmd, parametros[4], DbType.Int32, _pontuacao.GolsPro);
            db.AddInParameter(cmd, parametros[5], DbType.Int32, _pontuacao.GolsContra);
            db.AddInParameter(cmd, parametros[6], DbType.Int64, _pontuacao.ID);

            db.ExecuteNonQuery(cmd);
        }
    }
}
